package org.jeecg.modules.app.util.alipay;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipaySystemOauthTokenRequest;
import com.alipay.api.response.AlipaySystemOauthTokenResponse;
import org.jeecg.common.api.vo.Result;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.HashMap;
import java.util.Map;

/**
 * 这里是一个注释
 *
 * @author scw
 * @version v1.0
 * @date
 */
public class AliPayDemo {

    private String APP_ID; /**Appid*/
    private String MERCHANT_PRIVATE_KEY; /**商户私钥*/
    private String ALIPAY_PUBLIC_KEY; /**支付宝公钥*/
    /**
     * 授权码
     * @param auth_code
     * @return
     * @throws AlipayApiException
     */
    @RequestMapping("getInfo")
    public Result getInfo(String auth_code) throws AlipayApiException {
        //使用支付宝小程序的固定方法获取auth_code
        if(auth_code==null||auth_code.length()==0) {
            return Result.error("请求参数auth_code不能为空");
        }else {
            //String serverUrl, String appId, String privateKey, String format,String charset, String alipayPublicKey, String signType
            //实例化客户端 参数：正式环境URL,Appid,商户私钥 PKCS8格式,字符编码格式,字符格式,支付宝公钥,签名方式
            AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do",APP_ID,MERCHANT_PRIVATE_KEY,"json","GBK",ALIPAY_PUBLIC_KEY,"RSA2");
            AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
            // 值为authorization_code时，代表用code换取
            request.setGrantType("authorization_code");
            //授权码，用户对应用授权后得到的
            request.setCode(auth_code);
            //这里使用execute方法
            AlipaySystemOauthTokenResponse response = alipayClient.execute(request);
            //刷新令牌，上次换取访问令牌时得到。见出参的refresh_token字段
            request.setRefreshToken(response.getAccessToken());
            //返回成功时 就将唯一标识返回
            if(response.isSuccess()){
                System.out.println("调用成功");
                //我这里只返回了一个字段给前端用
                Map<String,Object> map=new HashMap<>();
                map.put("userid", response.getUserId());
                return Result.OK(map);
            } else {
                return Result.error("调用失败");
            }
        }
    }

}
